package Demo23;

/**
 * 寻找旋转排序数组中的最小值
 * https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/
 * 以最右边的点作为参照物,采用二分查找来完成
 */
class Solution {
    public int findMin(int[] nums) {
        int left = 0,right = nums.length - 1;
        int x = nums[right];
        while(left < right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] > x) {
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        return nums[left];
    }

    /**
     * 这个是采用左边作为参照物的
     * @param nums
     * @return
     */
    public int findMin2(int[] nums) {
        int left = 0,right = nums.length - 1;
        int x = nums[left];
        while(left < right) {
            int mid = left + (right - left) / 2;
            if(nums[mid] >= x) {
                left = mid + 1;
            }else {
                right = mid;
            }
        }
        if(nums[0] < nums[left]) return nums[0];
        return nums[left];
    }
}